package be.vdab.Servlets;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import be.vdab.entities.Reservatie;

/**
 * Servlet implementation class ReservatieMandjeServlet
 */
@WebServlet("/reservatiemandje.htm")
public class ReservatieMandjeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    private static final String VIEW = "/WEB-INF/JSP/reservatiemandje.jsp";
        
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	HttpSession session = request.getSession();
    	@SuppressWarnings("unchecked")
		Map<Integer, Integer> reservatieMap = (HashMap<Integer, Integer>) session.getAttribute("reservatieMap");
		
    	BigDecimal bedrag = BigDecimal.ZERO;
    	
    	if (request.getParameter("voorstellingsNr") != null){
    	
	    	int voorstellingsNr = Integer.parseInt(request.getParameter("voorstellingsNr"));
	    			
	    	if (reservatieMap.containsKey(voorstellingsNr)){
				int reedsGereserveerd = reservatieMap.get(voorstellingsNr);
				int nieuwGereserveerd = Integer.parseInt(request.getParameter("plaatsen"));
				reservatieMap.put(voorstellingsNr, nieuwGereserveerd);
				session.setAttribute("reservatieMap", reservatieMap);
				request.setAttribute("plaatsen", reedsGereserveerd);
			} else {
				reservatieMap.put(voorstellingsNr, Integer.parseInt(request.getParameter("plaatsen")));
				session.setAttribute("reservatieMap", reservatieMap);
				
			}
    	}
		
		//verwijderen van eventuele voorstellingen
    	if (request.getParameter("nummer") != null){
    		String[] parameterValues = request.getParameterValues("nummer");
			for (String nummerAlsString:parameterValues){
				int nummer = Integer.parseInt(nummerAlsString);
    			reservatieMap.remove(nummer);
    		}
		}
		
		List<Reservatie> reservaties= new ArrayList<>();
		Iterator<Integer> it = reservatieMap.keySet().iterator();
		while (it.hasNext()) { 
			int vNr = it.next(); 
			int gereserveerdePlaatsen = reservatieMap.get(vNr); 
			Reservatie reservatie = new Reservatie();
			reservatie.setGereserveerdePlaatsen(gereserveerdePlaatsen);
			reservatie.setVoorstelling(vNr);
			reservaties.add(reservatie);
			
			bedrag = bedrag.add(reservatie.getPrijs().multiply(new BigDecimal(gereserveerdePlaatsen)));
			
		}
		
		
		
		request.setAttribute("reservaties", reservaties);
		session.setAttribute("bedrag", bedrag);
		session.setAttribute("heeftMandje", "heeftMandje");
    	RequestDispatcher dispatcher = request.getRequestDispatcher(VIEW);
		dispatcher.forward(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}
